package tables;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Properties;

import beans.Utilisateur;

public class JdbcGroupe {
	/**
	 * Ajoute un pseudo dans un groupe
	 * 
	 * @param pseudo
	 * @param groupe
	 * @return 0 si ok, 1 si existe dejà
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 * @throws IOException
	 */

	public static int addgrp(String pseudo, String groupe) throws SQLException,
			ClassNotFoundException, IOException {
		int res = 0;

		// se connecter à la base de données

		if (existe(pseudo, groupe)) // on insert pas
			res = 1;
		else {// sinon on ajoute
			Properties props = new Properties();
			FileInputStream fis = new FileInputStream(
					"/home/auberi/Documents/JEE/workspace_jee/Alibi/src/connInfoLocal.txt");
			props.load(fis);

			String passwd = props.getProperty("passwd");
			String url = props.getProperty("url");
			String user = props.getProperty("user");

			// charger le driver
			Class.forName("org.postgresql.Driver");
			// se connecter à la base de données
			Connection conn = DriverManager.getConnection(url, user, passwd);
			// issue a query (create a statement and execute a query on it)
			Statement stmt = conn.createStatement();
			stmt.executeUpdate("INSERT INTO groupe VALUES ('" + groupe + "','"
					+ pseudo + "')");
			stmt.close();
		}

		return res;
	}

	/**
	 * supprime un pseudo dans un groupe
	 * 
	 * @param pseudo
	 * @param groupe
	 * @return 0 si ok bien suprimé, 1 si n'existe pas.
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 * @throws IOException
	 */
	public static int suppgrp(String pseudo, String groupe)
			throws SQLException, ClassNotFoundException, IOException {
		int res = 0;

		if (!existe(pseudo, groupe)) // on insert pas
			res = 1;
		else {
			Properties props = new Properties();
			FileInputStream fis = new FileInputStream(
					"/home/auberi/Documents/JEE/workspace_jee/Alibi/src/connInfoLocal.txt");
			props.load(fis);

			String passwd = props.getProperty("passwd");
			String url = props.getProperty("url");
			String user = props.getProperty("user");

			// charger le driver
			Class.forName("org.postgresql.Driver");
			// se connecter à la base de données
			Connection conn = DriverManager.getConnection(url, user, passwd);
			Statement stmt = conn.createStatement();
			stmt.executeUpdate("DELETE FROM groupe WHERE pseudo = '" + pseudo
					+ "' and grp = '" + groupe + "'; ");
			stmt.close();
		}
		return res;
	}

	/**
	 * Renvoie si un membre appartient a un groupe
	 * 
	 * @param pseudo
	 * @param groupe
	 * @return
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 * @throws IOException
	 */
	public static boolean existe(String pseudo, String groupe)
			throws SQLException, ClassNotFoundException, IOException {
		int cpt = 0;

		Properties props = new Properties();
		FileInputStream fis = new FileInputStream(
				"/home/auberi/Documents/JEE/workspace_jee/Alibi/src/connInfoLocal.txt");
		props.load(fis);

		String passwd = props.getProperty("passwd");
		String url = props.getProperty("url");
		String user = props.getProperty("user");

		// charger le driver
		Class.forName("org.postgresql.Driver");
		// se connecter à la base de données
		Connection conn = DriverManager.getConnection(url, user, passwd);
		Statement state = conn.createStatement();
		// chercher un membre avec ce groupe
		ResultSet resultat = state
				.executeQuery("SELECT * FROM groupe WHERE pseudo ='" + pseudo
						+ "' AND grp='" + groupe + "'");

		// chercher si resultat non vide
		while (resultat.next())
			cpt++;

		state.close();

		return cpt != 0;
	}

	/**
	 * fonction permettant de savoir les groupes associé a un membre
	 * 
	 * @param pseu
	 *            : pseudo de l'utilisateur dont on veut la liste de ses
	 *            groupes.
	 * @return liste : des groupes du membre
	 * @throws IOException
	 */
	public static ArrayList<String> getGroupes(String pseu)
			throws SQLException, ClassNotFoundException, IOException {
		ArrayList<String> liste = new ArrayList<String>();
		Properties props = new Properties();
		FileInputStream fis = new FileInputStream(
				"/home/auberi/Documents/JEE/workspace_jee/Alibi/src/connInfoLocal.txt");
		props.load(fis);

		String passwd = props.getProperty("passwd");
		String url = props.getProperty("url");
		String user = props.getProperty("user");

		// charger le driver
		Class.forName("org.postgresql.Driver");
		// se connecter à la base de données
		Connection conn = DriverManager.getConnection(url, user, passwd);
		Statement state = conn.createStatement();
		// chercher un membre avec ce groupe
		ResultSet resultat = state
				.executeQuery("SELECT * FROM groupe WHERE pseudo ='" + pseu
						+ "'");

		// extraire une liste de groupes.
		while (resultat.next()) {
			liste.add(resultat.getString("grp"));
		}
		state.close();
		return liste;
	}

	/**
	 * fonction donnant la liste des membres appartenant a un groupe
	 * 
	 * @param groupe
	 *            : nom du groupe dont ont veux une liste des membres
	 * @return liste : liste String des pseudos des membres du groupe
	 * @throws IOException
	 */
	public static ArrayList<String> getNameMembres(String groupe)
			throws SQLException, ClassNotFoundException, IOException {
		ArrayList<String> liste = new ArrayList<String>();
		Properties props = new Properties();
		FileInputStream fis = new FileInputStream(
				"/home/auberi/Documents/JEE/workspace_jee/Alibi/src/connInfoLocal.txt");
		props.load(fis);

		String passwd = props.getProperty("passwd");
		String url = props.getProperty("url");
		String user = props.getProperty("user");

		// charger le driver
		Class.forName("org.postgresql.Driver");
		// se connecter à la base de données
		Connection conn = DriverManager.getConnection(url, user, passwd);
		Statement state = conn.createStatement();

		// chercher un membre avec ce groupe
		ResultSet resultat = state
				.executeQuery("SELECT * FROM groupe WHERE grp='" + groupe + "'");

		// extraire une liste de pseudo.
		while (resultat.next()) {
			liste.add(resultat.getString("pseudo"));
		}
		state.close();
		return liste;
	}

	/**
	 * renvoie une liste d'Utilisateur appartenant au groupe
	 * 
	 * @param groupe
	 * @return liste d'utilisateur du groupe
	 * @throws IOException
	 */
	public static ArrayList<Utilisateur> getMembres(String groupe)
			throws SQLException, ClassNotFoundException, IOException {
		ArrayList<Utilisateur> liste = new ArrayList<Utilisateur>();

		// trouver la liste des utilisateurs
		ArrayList<String> noms = new ArrayList<String>();
		Properties props = new Properties();
		FileInputStream fis = new FileInputStream(
				"/home/auberi/Documents/JEE/workspace_jee/Alibi/src/connInfoLocal.txt");
		props.load(fis);

		String passwd = props.getProperty("passwd");
		String url = props.getProperty("url");
		String user = props.getProperty("user");

		// charger le driver
		Class.forName("org.postgresql.Driver");
		// se connecter à la base de données
		Connection conn = DriverManager.getConnection(url, user, passwd);
		Statement state = conn.createStatement();
		// chercher un membre avec ce groupe
		ResultSet resultat = state
				.executeQuery("SELECT * FROM groupe WHERE grp='" + groupe + "'");
		while (resultat.next()) {
			noms.add(resultat.getString("pseudo"));
		}
		state.close();

		int i = 0;
		while (i < noms.size()) {
			liste.add(JdbcUtilisateur.findByPK(noms.get(i)));
			i++;
		}

		return liste;
	}

	/**
	 * supprime tout les groupe d'un membre
	 * 
	 * @throws IOException
	 */
	public static void supallgrp(String pseudo) throws SQLException,
			ClassNotFoundException, IOException {

		Properties props = new Properties();
		FileInputStream fis = new FileInputStream(
				"/home/auberi/Documents/JEE/workspace_jee/Alibi/src/connInfoLocal.txt");
		props.load(fis);

		String passwd = props.getProperty("passwd");
		String url = props.getProperty("url");
		String user = props.getProperty("user");

		// charger le driver
		Class.forName("org.postgresql.Driver");
		// se connecter à la base de données
		Connection conn = DriverManager.getConnection(url, user, passwd);
		Statement stmt = conn.createStatement();
		stmt.executeUpdate("DELETE FROM groupe WHERE pseudo = '" + pseudo
				+ "'; ");
		stmt.close();

	}

}
